# 字符串
# 定义：Python中的字符串用单引号/双引号/三个单/双引号括起来

# 一对单、双引号创建
# python有一种建议规范：单引号一般用作非中文、双引号一般用作中文
i = 'str'
i = "木舟"

# 三对单、双引号创建
# 区别于【一对】, 这种创建方式使输出的内容换行

i = """
str
str
str
"""
i = '''
str
str
str
'''

# 单双引号配合使用
content = 'I am taibai, 18 year old'
content = "I'm  'taibai' , 18 year old"
print(i)

## 操作字符串

## 拼接/复制/转换

# 字符串是可以通过 + 进行拼接的，前提是拼接两者必须都是字符串
m = "木"
z = "舟"
print(m + z)  # 木舟


# 如果字符串的值为数字，可以通过int函数进行转化成整型，浮点型则可以通过float
# type函数可以用来查看变量的数据类型
i = '123'
print(int(i))  # 输出为整型的123
print(type(int(i))) # class:int

p = '123.123'
print(float(p))
print(type(float(p)))

print('a' * 10)

## 切片取值, 根据下标取值
p = "我的名字叫做木舟"
print(p[0])

# 范围取值，切记一个原则：左取右不拿
print(p[6:8])
print(p[2:4])
print(p[2:])
print(p[:2])
print(p[:-2])

## 步长
## 切片可接收三个参数，以冒号:作为分割，第三个参数为步长,默认为1，可取负数
print(p[2::2])
print(p[2::-1])

## 面试官会问：怎么优雅快速的反转一个字符串或列表
## 通过切片取值，设置步长为-1
print(p[::-1])

## 转义符
## 比较常用的就是 \n, \t, 分别代表 回车 制表符 也就是一个tab
str4 = '你好\n我叫\t张三，今年18一枝花'
print(str4)

# 那么我们怎么正常的输出 转义符 呢?
# 需要在转义符前面再加一个 \

print("1\\n2")

## 格式化输出

## f-string python 3.6以上
## 在字符串前加前缀 f ，通过 {expression} 表达式，把 Python 表达式的值添加到字符串内

name = "张三"
print(f"我的名字叫{name}")

time = "2023-02-02"
print(f"今天天气真好，今天是{time}")

## 占位符
"""
% 运算符（求余符）也可用于字符串格式化。给定 ‘string’ % values ，则 string 中的 % 实例会
以零个或多个 values 元素替换。此操作被称为字符串插值。例如：
"""
# 字符串
print('%s' % 'hello world')

name = "张三"
print(f"我叫 {name} 我叫 {name}")

## format
"""
相对基本格式化输出采用 ‘%’ 的方法，format()功能更强大，该函数把字符串当成一个模板，通过传入的
参数进行格式化，并且使用大括号‘{}’作为特殊字符代替‘%’
"""

print('{} {}'.format('hello', 'world'))  # 不带字段
print('{0} {1}'.format('hello', 'world'))  # 带数字编号
print('{0} {1} {0}'.format('hello', 'world'))  # 打乱顺序
print('{a} {tom} {a}'.format(tom='hello', a='world'))  # 带关键字